<?php
abstract class GenericBSN {
	protected $att = array("Result"  => null, 
						   "Record"  => null,
						   "Records" => null,
						   "Options" => null,
						   "Message" => null,
						   "TotalRecordCount" => 0);
	
	protected $where;
	protected $params;
	protected $order;
	protected $limit;
	protected $dao;
	
	public function __get($var) {
		if ($var == "sql") {
			return $this->where . $this->order . $this->limit;
		}
		
		if (!array_key_exists($var, $this->att)) {
			throw new Exception("O atributo '$var' é inválido para " . get_class($this));
		} 
		return $this->att[$var];
	}
	
	public function __set($var, $value) {
		if (!array_key_exists($var, $this->att)) {
			throw new Exception("O atributo '$var' é inválido para " . get_class($this));
		}
		$this->att[$var] = $value;
	}
	
	public function toArray() {
		return $this->att;
	}
	
	public function toJSON() {
		return json_encode($this->att);
	}
	
	public function clear() {
		foreach ($this->att as $key => $value) {
			$this->att[$key] = null;
		}
		
	}
	
	protected function preencher($vars) {
		// definir ordem
		$this->order	= isset($vars['jtSorting'])	? " order by " . $vars['jtSorting'] : '';
		
		// definir filtro
		$campo	= isset($vars['campo'])		? $vars['campo'] 		 : '';
		$valor	= isset($vars['valor'])		? '%'.$vars['valor'].'%' : '';
		$this->where = strlen($campo) > 0	? " where $campo like :valor " : '';
		$this->params = strlen($campo) > 0	? array('valor' => $valor) : null;
		
		// limitar qtde de registros
		$start	= isset($vars['jtStartIndex']) 	? $vars['jtStartIndex']  : 0;
		$size	= isset($vars['jtPageSize'])	? $vars['jtPageSize'] 	 : 10;
		$this->limit = " limit $start, $size";
	}
	
	protected function validaAcesso($recurso) {
		$dao = new AcessoDAO();
		$acesso = $dao->ConsultarPermissao($_SESSION["usuario"]["id"], $recurso);
		if (isset($acesso[0]) && ($acesso[0]["acesso"] == 0)) {
			throw new Exception("Acesso não permitido! Recurso: $recurso");
		}
	}
}
?>